var code = require('./code.js');
var gbk = require('./gbk.js');

var codeto = {
	1 : '终端心跳间隔(s)',
	2 : 'TCP消息应答超时时间(s)',
	3 : 'TCP消息重传次数',
	4 : 'UDP消息应答超时时间(s)',
	5 : 'UDP消息重传次数',
	6 : 'SMS消息应答超时时间(s)',
	7 : 'SMS消息重传次数',
	16 : '主服务器APN',
	17 : '主服务器无线通信拨号用户名',
	18 : '主服务器无线通信拨号密码',
	19 : '主服务器地址,IP或域名',
	20 : '备份服务器APN，无线通信拨号访问点',
	21 : '备份服务器无线通信拨号用户名',
	22 : '备份服务器无线通信拨号密码',
	23 : '备份服务器地址,IP或域名',
	24 : '服务器TCP端口',
	25 : '服务器UDP端口',
	26 : '道路运输证IC卡认证主服务器IP地址或域名',
	27 : '道路运输证IC卡认证主服务器TCP端口',
	28 : '道路运输证IC卡认证主服务器UDP端口',
	29 : '道路运输证IC卡认证备份服务器IP地址或域名',
	32 : '位置汇报策略',//0：定时汇报；1：定距汇报；2：定时和定距汇报
	33 : '位置汇报方案',//0：根据 ACC 状态； 1：根据登录状态和 ACC 状态，先判断登录状态，若登录再根据 ACC 状态
	34 : '驾驶员未登录汇报时间间隔(s)',
	39 : '休眠时汇报时间间隔(s)',
	40 : '紧急报警时汇报时间间隔(s)',
	41 : '缺省时间汇报间隔(s)',
	44 : '缺省距离汇报间隔(m)',
	45 : '驾驶员未登录汇报距离间隔(m)',
	46 : '休眠时汇报距离间隔(m)',
	47 : '紧急报警时汇报距离间隔(m)',
	48 : '拐点补传角度',
	49 : '电子围栏半径',
	64 : '监控平台电话号码',
	65 : '复位电话号码',
	66 : '恢复出厂设置电话号码',
	67 : '监控平台SMS电话号码',
	68 : '接收终端SMS文本报警号码',
	69 : '终端电话接听策略',//0：自动接听；1：ACC ON 时自动接听，OFF 时手动接听
	70 : '每次最长通话时间(s)',
	71 : '当月最长通话时间(s)',
	72 : '监听电话号码',
	73 : '监管平台特权短信号码',
	80 : '报警屏蔽字',
	81 : '报警发送文本SMS开关',
	82 : '报警拍摄开关',
	83 : '报警拍摄存储标志',
	84 : '关键标志',
	85 : '最高速度(KMps)',
	86 : '超速持续时间(s)',
	87 : '连续驾驶时间门限(s)',
	88 : '当天累计驾驶时间门限(s)',
	89 : '最小休息时间(s)',
	90 : '最长停车时间(s)',
	91 : '超速报警预警差值(100mph)',
	92 : '疲劳驾驶预警差值(s)',
	93 : '碰撞报警参数设置',//b7-b0： 碰撞时间，单位 4ms；b15-b8：碰撞加速度，单位 0.1g，设置范围在：0-79 之间，默认为10。
	94 : '侧翻报警参数设置',//侧翻角度，单位 1 度，默认为 30 度。
	100 : '定时拍照控制',
	101 : '定距拍照控制',
	112 : '图像视频质量',//1-10，1 最好
	113 : '亮度',//0-255
	114 : '对比度',//0-127
	115 : '饱和度',//0-127
	116 : '色度',//0-255
	128 : '车辆里程表读数(100m)',
	129 : '车辆所在的省域ID',
	130 : '车辆所在的市域ID',
	131 : '机动车号牌',
	132 : '车牌颜色',//按照 JT/T415-2006 的 5.4.12
	144 : 'GNSS定位模式',//bit0，0：禁用 GPS 定位， 1：启用 GPS 定位；	bit1，0：禁用北斗定位， 1：启用北斗定位；bit2，0：禁用 GLONASS 定位， 1：启用 GLONASS 定位；bit3，0：禁用 Galileo 定位， 1：启用 Galileo 定位。
	145 : 'GNSS波特率',//0x00：4800；0x01：9600；	0x02：19200；0x03：38400；0x04：57600；0x05：115200
	146 : 'GNSS模块详细定位数据输出频率', //0x00：500ms；0x01：1000ms（默认值）；	0x02：2000ms；0x03：3000ms；0x04：4000ms。
	147 : 'GNSS模块详细定位数据采集频率(s)',
	148 : 'GNSS模块详细定位数据上传方式',//0x00，本地存储，不上传（默认值）；	0x01，按时间间隔上传；0x02，按距离间隔上传；0x0B，按累计时间上传，达到传输时间后自动停止上传；0x0C，按累计距离上传，达到距离后自动停止上传；0x0D，按累计条数上传，达到上传条数后自动停止上传。
	149 : 'GNSS模块详细定位数据上传设置'//上传方式为 0x01 时，单位为秒；	上传方式为 0x02 时，单位为米；上传方式为 0x0B 时，单位为秒；上传方式为 0x0C 时，单位为米；上传方式为 0x0D 时，单位为条。
};
var totype = {
	'终端心跳间隔(s)' : '通讯参数',
	'TCP消息应答超时时间(s)' : '通讯参数',
	'TCP消息重传次数' : '通讯参数',
	'UDP消息应答超时时间(s)' : '通讯参数',
	'UDP消息重传次数' : '通讯参数',
	'SMS消息应答超时时间(s)' : '通讯参数',
	'SMS消息重传次数' : '通讯参数',
	'主服务器APN' : '通讯参数',
	'主服务器无线通信拨号用户名' : '通讯参数',
	'主服务器无线通信拨号密码' : '通讯参数',
	'主服务器地址,IP或域名' : '通讯参数',
	'备份服务器APN，无线通信拨号访问点' : '通讯参数',
	'备份服务器无线通信拨号用户名' : '通讯参数',
	'备份服务器无线通信拨号密码' : '通讯参数',
	'备份服务器地址,IP或域名' : '通讯参数',
	'服务器TCP端口' : '通讯参数',
	'服务器UDP端口' : '通讯参数',
	'道路运输证IC卡认证主服务器IP地址或域名' : '通讯参数',
	'道路运输证IC卡认证主服务器TCP端口' : '通讯参数',
	'道路运输证IC卡认证主服务器UDP端口' : '通讯参数',
	'道路运输证IC卡认证备份服务器IP地址或域名' : '通讯参数',
	'位置汇报策略' : '汇报参数',//0：定时汇报；1：定距汇报；2：定时和定距汇报
	'位置汇报方案' : '汇报参数',//0：根据 ACC 状态； 1：根据登录状态和 ACC 状态，先判断登录状态，若登录再根据 ACC 状态
	'驾驶员未登录汇报时间间隔(s)' : '汇报参数',
	'休眠时汇报时间间隔(s)' : '汇报参数',
	'紧急报警时汇报时间间隔(s)' : '汇报参数',
	'缺省时间汇报间隔(s)' : '汇报参数',
	'缺省距离汇报间隔(m)' : '汇报参数',
	'驾驶员未登录汇报距离间隔(m)' : '汇报参数',
	'休眠时汇报距离间隔(m)' : '汇报参数',
	'紧急报警时汇报距离间隔(m)' : '汇报参数',
	'拐点补传角度' : '汇报参数',
	'电子围栏半径' : '汇报参数',
	'监控平台电话号码' : '监控参数',
	'复位电话号码' : '监控参数',
	'恢复出厂设置电话号码' : '监控参数',
	'监控平台SMS电话号码' : '监控参数',
	'接收终端SMS文本报警号码' : '监控参数',
	'终端电话接听策略' : '监控参数',//0：自动接听；1：ACC ON 时自动接听，OFF 时手动接听
	'每次最长通话时间(s)' : '监控参数',
	'当月最长通话时间(s)' : '监控参数',
	'监听电话号码' : '监控参数',
	'监管平台特权短信号码' : '监控参数',
	'报警屏蔽字' : '报警参数',
	'报警发送文本SMS开关' : '报警参数',
	'报警拍摄开关' : '报警参数',
	'报警拍摄存储标志' : '报警参数',
	'关键标志' : '报警参数',
	'最高速度(KMps)' : '报警参数',
	'超速持续时间(s)' : '报警参数',
	'连续驾驶时间门限(s)' : '报警参数',
	'当天累计驾驶时间门限(s)' : '报警参数',
	'最小休息时间(s)' : '报警参数',
	'最长停车时间(s)' : '报警参数',
	'超速报警预警差值(100mph)' : '报警参数',
	'疲劳驾驶预警差值(s)' : '报警参数',
	'碰撞报警参数设置' : '报警参数',
	'侧翻报警参数设置' : '报警参数',
	'定时拍照控制' : '图像参数',
	'定距拍照控制' : '图像参数',
	'图像视频质量' : '图像参数',//1-10，1 最好
	'亮度' : '图像参数',//0-255
	'对比度' : '图像参数',//0-127
	'饱和度' : '图像参数',//0-127
	'色度' : '图像参数',
	'车辆里程表读数(100m)' : '车辆参数',
	'车辆所在的省域ID' : '车辆参数',
	'车辆所在的市域ID' : '车辆参数',
	'机动车号牌' : '车辆参数',
	'车牌颜色' : '车辆参数',
	'GNSS定位模式' : 'GNSS',//bit0，0：禁用 GPS 定位， 1：启用 GPS 定位；	bit1，0：禁用北斗定位， 1：启用北斗定位；bit2，0：禁用 GLONASS 定位， 1：启用 GLONASS 定位；bit3，0：禁用 Galileo 定位， 1：启用 Galileo 定位。
	'GNSS波特率' : 'GNSS',//0x00：4800；0x01：9600；	0x02：19200；0x03：38400；0x04：57600；0x05：115200
	'GNSS模块详细定位数据输出频率' : 'GNSS', //0x00：500ms；0x01：1000ms（默认值）；	0x02：2000ms；0x03：3000ms；0x04：4000ms。
	'GNSS模块详细定位数据采集频率(s)' : 'GNSS',
	'GNSS模块详细定位数据上传方式' : 'GNSS',//0x00，本地存储，不上传（默认值）；	0x01，按时间间隔上传；0x02，按距离间隔上传；0x0B，按累计时间上传，达到传输时间后自动停止上传；0x0C，按累计距离上传，达到距离后自动停止上传；0x0D，按累计条数上传，达到上传条数后自动停止上传。
	'GNSS模块详细定位数据上传设置' : 'GNSS'
};
var tocode = {
	'道路运输证IC卡认证主服务器IP地址或域名' :26 ,
	'道路运输证IC卡认证主服务器TCP端口' :27 ,
	'道路运输证IC卡认证主服务器UDP端口' : 28,
	'道路运输证IC卡认证备份服务器IP地址或域名' : 29,
	'SMS消息应答超时时间(s)' : 6,
	'SMS消息重传次数' : 7,
	'TCP消息应答超时时间(s)' : 2,
	'TCP消息重传次数' : 3,
	'UDP消息应答超时时间(s)' : 4,
	'UDP消息重传次数' : 5,
	'主服务器APN' : 16,
	'主服务器地址,IP或域名' : 19,
	'主服务器无线通信拨号密码' : 18,
	'主服务器无线通信拨号用户名' : 17,
	'亮度' : 113,
	'休眠时汇报时间间隔(s)' : 39,
	'休眠时汇报距离间隔(m)' : 46,
	'位置汇报方案' : 33,
	'位置汇报策略' : 32,
	'关键标志' : 84,
	'图像视频质量' : 112,
	'备份服务器APN，无线通信拨号访问点' : 20,
	'备份服务器地址,IP或域名' : 23,
	'备份服务器无线通信拨号密码' : 22,
	'备份服务器无线通信拨号用户名' : 21,
	'复位电话号码' : 65,
	'定时拍照控制' : 100,
	'定距拍照控制' : 101,
	'对比度' : 114,
	'当天累计驾驶时间门限(s)' : 88,
	'当月最长通话时间(s)' : 71,
	'恢复出厂设置电话号码' : 66,
	'报警发送文本SMS开关' : 81,
	'报警屏蔽字' : 80,
	'报警拍摄存储标志' : 83,
	'报警拍摄开关' : 82,
	'拐点补传角度' : 48,
	'接收终端SMS文本报警号码' : 68,
	'最小休息时间(s)' : 89,
	'最长停车时间(s)' : 90,
	'最高速度(KMps)' : 85,
	'服务器TCP端口' : 24,
	'服务器UDP端口' : 25,
	'机动车号牌' : 131,
	'每次最长通话时间' : 70,
	'电子围栏半径' : 49,
	'监听电话号码' : 72,
	'监控平台SMS电话号码' : 67,
	'监控平台电话号码' : 64,
	'监管平台特权短信号码' : 73,
	'紧急报警时汇报时间间隔(s)' : 40,
	'紧急报警时汇报距离间隔(m)' : 47,
	'终端心跳间隔(s)' : 1,
	'终端电话接听策略' : 69,
	'缺省时间汇报间隔(s)' : 41,
	'缺省距离汇报间隔(m)' : 44,
	'色度' : 116,
	'超速持续时间(s)' : 86,
	'车牌颜色' : 132,
	'车辆所在的市域ID' : 130,
	'车辆所在的省域ID' : 129,
	'车辆里程表读数(100m)' : 128,
	'连续驾驶时间门限(s)' : 87,
	'饱和度' : 115,
	'驾驶员未登录汇报时间间隔(s)' : 34,
	'驾驶员未登录汇报距离间隔(m)' : 45,
	'超速报警预警差值(100mph)' :91,
	'疲劳驾驶预警差值(s)' :92,
	'碰撞报警参数设置' : 93,//b7-b0： 碰撞时间，单位 4ms；b15-b8：碰撞加速度，单位 0.1g，设置范围在：0-79 之间，默认为10。
	'侧翻报警参数设置' :94 ,//侧翻角度，单位 1 度，默认为 30 度。
	'GNSS定位模式' : 144,//bit0，0：禁用 GPS 定位， 1：启用 GPS 定位；	bit1，0：禁用北斗定位， 1：启用北斗定位；bit2，0：禁用 GLONASS 定位， 1：启用 GLONASS 定位；bit3，0：禁用 Galileo 定位， 1：启用 Galileo 定位。
	'GNSS波特率' : 145,//0x00：4800；0x01：9600；	0x02：19200；0x03：38400；0x04：57600；0x05：115200
	'GNSS模块详细定位数据输出频率' : 146, //0x00：500ms；0x01：1000ms（默认值）；	0x02：2000ms；0x03：3000ms；0x04：4000ms。
	'GNSS模块详细定位数据采集频率(s)' : 147,
	'GNSS模块详细定位数据上传方式' : 148,//0x00，本地存储，不上传（默认值）；	0x01，按时间间隔上传；0x02，按距离间隔上传；0x0B，按累计时间上传，达到传输时间后自动停止上传；0x0C，按累计距离上传，达到距离后自动停止上传；0x0D，按累计条数上传，达到上传条数后自动停止上传。
	'GNSS模块详细定位数据上传设置' : 149//上传方式为 0x01 时，单位为秒；	上传方式为 0x02 时，单位为米；上传方式为 0x0B 时，单位为秒；上传方式为 0x0C 时，单位为米；上传方式为 0x0D 时，单位为条。
};
var codetodatatype = {
	1 : 'DWORD',
	2 : 'DWORD',
	3 : 'DWORD',
	4 : 'DWORD',
	5 : 'DWORD',
	6 : 'DWORD',
	7 : 'DWORD',
	16 : 'STRING',
	17 : 'STRING',
	18 : 'STRING',
	19 : 'STRING',
	20 : 'STRING',
	21 : 'STRING',
	22 : 'STRING',
	23 : 'STRING',
	24 : 'DWORD',
	25 : 'DWORD',
	26 : 'STRING',
	27 : 'DWORD',
	28 : 'DWORD',
	29 : 'STRING',
	32 : 'DWORD',//0：定时汇报；1：定距汇报；2：定时和定距汇报
	33 : 'DWORD',//0：根据 ACC 状态； 1：根据登录状态和 ACC 状态，先判断登录状态，若登录再根据 ACC 状态
	34 : 'DWORD',
	39 : 'DWORD',
	40 : 'DWORD',
	41 : 'DWORD',
	44 : 'DWORD',
	45 : 'DWORD',
	46 : 'DWORD',
	47 : 'DWORD',
	48 : 'DWORD',
	49 : 'WORD',
	64 : 'STRING',
	65 : 'STRING',
	66 : 'STRING',
	67 : 'STRING',
	68 : 'STRING',
	69 : 'DWORD',//0：自动接听；1：ACC ON 时自动接听，OFF 时手动接听
	70 : 'DWORD',
	71 : 'DWORD',
	72 : 'STRING',
	73 : 'STRING',
	80 : 'DWORD',
	81 : 'DWORD',
	82 : 'DWORD',
	83 : 'DWORD',
	84 : 'DWORD',
	85 : 'DWORD',
	86 : 'DWORD',
	87 : 'DWORD',
	88 : 'DWORD',
	89 : 'DWORD',
	90 : 'DWORD',
	91 : 'WORD',
	92 : 'WORD',
	93 : 'WORD',//b7-b0： 碰撞时间，单位 4ms；b15-b8：碰撞加速度，单位 0.1g，设置范围在：0-79 之间，默认为10。
	94 : 'WORD',//侧翻角度，单位 1 度，默认为 30 度。
	100 : 'DWORD',
	101 : 'DWORD',
	112 : 'DWORD',//1-10，1 最好
	113 : 'DWORD',//0-255
	114 : 'DWORD',//0-127
	115 : 'DWORD',//0-127
	116 : 'DWORD',//0-255
	128 : 'DWORD',
	129 : 'WORD',
	130 : 'WORD',
	131 : 'STRING',
	132 : 'BYTE',//按照 JT/T415-2006 的 5.4.12
	144 : 'BYTE',//bit0，0：禁用 GPS 定位， 1：启用 GPS 定位；	bit1，0：禁用北斗定位， 1：启用北斗定位；bit2，0：禁用 GLONASS 定位， 1：启用 GLONASS 定位；bit3，0：禁用 Galileo 定位， 1：启用 Galileo 定位。
	145 : 'BYTE',//0x00：4800；0x01：9600；	0x02：19200；0x03：38400；0x04：57600；0x05：115200
	146 : 'BYTE', //0x00：500ms；0x01：1000ms（默认值）；	0x02：2000ms；0x03：3000ms；0x04：4000ms。
	147 : 'DWORD',
	148 : 'BYTE',//0x00，本地存储，不上传（默认值）；	0x01，按时间间隔上传；0x02，按距离间隔上传；0x0B，按累计时间上传，达到传输时间后自动停止上传；0x0C，按累计距离上传，达到距离后自动停止上传；0x0D，按累计条数上传，达到上传条数后自动停止上传。
	149 : 'DWORD'//上传方式为 0x01 时，单位为秒；	上传方式为 0x02 时，单位为米；上传方式为 0x0B 时，单位为秒；上传方式为 0x0C 时，单位为米；上传方式为 0x0D 时，单位为条。
};

var typebytetovalue = function(type,bytes){
	if(type == 'DWORD' && bytes.length == 4){
		return code.bytes2int4(bytes);
	}else if(type == 'STRING'){
		if(bytes[0]>127){
			return gbk.findProvincial(bytes.slice(0,2))+String.fromCharCode.apply(null,bytes.slice(2));
		}else{
			return String.fromCharCode.apply(null,bytes);
		}
	}else if(type == 'WORD' && bytes.length == 2){
		return code.bytes2int2(bytes);
	}else if(type == 'BYTE'){
		return bytes[0];
	}else{
		return null;
	}
};

module.exports = {
    codeto: codeto,
    tocode : tocode,
	totype : totype,
	codetodatatype : codetodatatype,
	typebytetovalue : typebytetovalue
};